package advance.day08;

/**
 * 描述：
 *      给定一个arr数组全是正数，求累加和为aim的最长子数组
 *      双指针维护一个滑动窗口，当滑动窗口内的和小于aim时，向右移动r；
 *      当滑动窗口内的和大于aim时，向右移动l，相当于以l开头的子数组已经找完了
 * @author hl
 * @version 1.0
 * @date 2020/11/15 11:09
 */
public class LonggestSumSubArrayLengthInPositiveArray {
    public static int getMaxLength(int[] arr, int aim){
        if (arr == null || arr.length == 0) {
            return 0;
        }
        int l = 0;
        int r = 0;
        int sum = arr[0];
        int len = 0;
        while(r < arr.length) {
            if (sum < aim) {
                r++;
                if (r == arr.length) {
                    break;
                }
                sum += arr[r];
            }else if (sum > aim) {
                sum -= arr[l++];
            }else{
                len = Math.max(len, r - l + 1);
                sum -= arr[l++];
            }
        }
        return len;
    }

    public static void main(String[] args) {
        int[] arr = {9};
        System.out.println(getMaxLength(arr, 9));
    }
}
